#ifndef _TEXTURE_MANAGER_H_
#define _TEXTURE_MANAGER_H_

#include "Renderer.h"

class TextureManager
{
	//////////////////////////////////////////////////////////////////////////
	//	------------------------------------------------------------------	//
	//							DATA	MEMBERS								//
	//	------------------------------------------------------------------	//
	//////////////////////////////////////////////////////////////////////////

	// Singleton's static instance
	static TextureManager* sm_pInstance;

	vector<IDirect3DTexture9*> m_vpTextures;

	//////////////////////////////////////////////////////////////////////////
	//	------------------------------------------------------------------	//
	//							PRIVATE	FUNCTIONS							//
	//	------------------------------------------------------------------	//
	//////////////////////////////////////////////////////////////////////////

	// Default Constructor - Initialize all variables to safe values
	TextureManager(void);

	// For a proper singleton, the trilogy needs to be defined
	TextureManager(const TextureManager&) {}				// Copy Constructor
	TextureManager& operator=(const TextureManager&) {}		// Assignment Operator
	~TextureManager(void) {}								// Destructor

public:
	//////////////////////////////////////////////////////////////////////////
	//	------------------------------------------------------------------	//
	//							PUBLIC	FUNCTIONS							//
	//	------------------------------------------------------------------	//
	//////////////////////////////////////////////////////////////////////////

	// Used to access the singleton's instance
	static TextureManager* GetInstance(void);

	// Used to delete the singleton's instance
	static void DeleteInstance(void);

	void Initialize(void);

	int LoadTexture(const char* filename);

	IDirect3DTexture9* GetTexture(int textureID);
};

#define TEXTURE_MNG TextureManager::GetInstance()

#endif // _TEXTURE_MANAGER_H_